package com.cly.base.dto;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cly.utils.QueryUtils;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * 基本的分页对象
 *
 * @author by 春风能解释
 * <p>
 * 2024/8/26
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
@Schema(name = "基本的分页对象")
public class BasePageParam<T> {

    /**
     * 页码
     */
    @Schema(description = "页码")
    private Integer current;
    /**
     * 页长
     */
    @Schema(description = "页长")
    private Integer size;
    /**
     * 查询条件
     */
    @Schema(description = "查询条件")
    private T query;

    /**
     * 分页构造器
     *
     * @return 分页条件
     */
    public IPage<T> pageBuilder() {
        return new Page<>(current, size);
    }


    /**
     * 构造查询条件(字符串模糊比较,其他精确比较)
     *
     * @param clazz  查询类型
     * @param ignore 排除字段
     * @return 查询条件
     */
    public QueryChainWrapper<T> wrapperBuilder(Class<T> clazz, String... ignore) {
        return QueryUtils.wrapperQueryBuilder(query, clazz);
    }
}
